package tool

import (
	"bufio"
	"errors"
	"github.com/gogf/gf/v2/frame/g"
	"io/fs"
	"os"
	"path/filepath"
)

// BuildAuthRoute 基于HTTP.method和path构建鉴权的路由
func BuildAuthRoute(method string, path string) string {
	return method + "_" + path
}

// NewFile 新建一个文件
func NewFile(fileFullPath string) (err error) {
	//检查文件是否存在
	if _, err = os.Stat(fileFullPath); errors.Is(err, fs.ErrNotExist) {
		//如果文件不存在，则创建文件所在的目录
		if err = os.MkdirAll(filepath.Dir(fileFullPath), 0755); err != nil {
			return errors.New("创建目录失败")
		}

		//创建文件
		file, err := os.Create(fileFullPath)
		if err != nil {
			return errors.New("创建文件失败")
		}
		defer func() {
			_ = file.Close()
		}()
		return nil
	} else if err != nil {
		return errors.New("检查文件失败:" + err.Error())
	} else {
		return errors.New("文件已存在")
	}
}

// ReadFileDataByLine 读取文件指定行内容
func ReadFileDataByLine(f string, start int64, end int64) (data []g.Map, err error) {
	data = make([]g.Map, 0)
	if start > end {
		return
	}
	file, err := os.Open(f)
	if err != nil {
		return
	}
	defer func() {
		_ = file.Close()
	}()
	reader := bufio.NewScanner(file)
	lineIndex := int64(0)
	for reader.Scan() {
		lineIndex++
		if lineIndex >= start && lineIndex <= end {
			data = append(data, g.Map{
				"line": lineIndex,
				"data": reader.Text(),
			})
		}
	}
	return data, nil
}
